#pragma once

#include <vector>

enum SquareConnections {
	SQC_UP
,	SQC_RIGHT
,	SQC_DOWN
,	SQC_LEFT
};

class Square
{
public:
	Square(int a_Id);

	virtual ~Square(void);

	void SetUp(Square*);
	void SetRight(Square*);
	void SetDown(Square*);
	void SetLeft(Square*);

	Square* Up();
	Square* Right();
	Square* Down();
	Square* Left();

	int GetId() const;

	bool IsEdgePiece() const;

	bool IsVisited() const;
	void SetVisited(Square*);

	void RemoveLink(Square*);

	const std::vector<Square*>& GetConnections() const;
	
private:

	int m_Id;
	
	std::vector<Square*> m_Connections;

	Square* m_Visited;
};
